package com.rao.gmall.product.controller;

import com.rao.gmall.common.cache.BloomName;
import com.rao.gmall.common.constant.RedisConst;
import com.rao.gmall.common.result.Result;
import com.rao.gmall.product.service.SkuInfoService;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RBloomFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author nzmxfan
 * @create 2021-08-18-16:16
 */
@RestController
@RequestMapping("/admin/product")
public class BloomAddAllController {

    @Autowired
    SkuInfoService skuInfoService;

    @Qualifier(BloomName.SKU)
    @Autowired
    RBloomFilter<Object> skufilter;

    /**
     * 1.获取所有的 skuId
     * 2.将所有的 skuId 添加到布隆过滤器中
     * // 3. TODO.设置定时任务，让布隆过滤器固定周期自动清除当前内容，并重新添加所有的 skuId
     */
    @GetMapping("/addAllBloom")
    public Result addAllBloom(){
        // 清除当前的布隆过滤器内容
        skufilter.delete();
        // 重新初始化一个新布隆过滤器
        boolean tryInit = skufilter.tryInit(1000000L, 0.001);
        List<Long> skuIds = skuInfoService.getAllId();
        for (Long skuId : skuIds) {
            // 新的布隆过滤器
            skufilter.add(RedisConst.SKUKEY_PREFIX + skuId + RedisConst.SKUKEY_SUFFIX);
        }
        return Result.ok(tryInit);

    }
}
